package filosofosChinos;

import semaforo.Semaforo;

public class Filosofo extends Thread{

	String nombre;
	Palito izq;
	Palito der;
	Semaforo mutex;
	
	public Filosofo(String nombre, Palito d, Palito i){
		this.nombre= nombre;
		izq= i;
		der= d;
		mutex= new Semaforo(1);
	}
	
	public void run(){
		int aleatorio= (int) (Math.random()*100);
		System.out.println("Cantidad de ciclos: " + aleatorio);
		for(int i= 0; i<aleatorio;i++){
			pensar();
			mutex.P();
			tomarPalitos();
			System.out.println(nombre + " esta comiendo");
			soltarPalitos();
			mutex.V();
		}
	}

	private void tomarPalitos() {
		System.out.println(nombre +" intento tomar el palito: "+ izq.id+ " der: "+ der.id );
		izq.tomar();
		der.tomar();
	}
	private void soltarPalitos(){
		System.out.println(nombre + " suelta los palillos");
		der.soltar();
		izq.soltar();
	}

	private void pensar() {
		try{
			long aleatorio= (long) (Math.random()*1000);
			Thread.sleep(aleatorio);
			System.out.println("Filosofo " + nombre + "durmio por "+ aleatorio + " milisegundos" );
		}catch(InterruptedException ie){
			System.out.println("Error al hacer tiempo.");
			ie.printStackTrace();
		}
		
	}
	
}
